# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.DataPipelines.V1.Model.GoogleCloudDatapipelinesV1RuntimeEnvironment do
  @moduledoc """
  The environment values to set at runtime.

  ## Attributes

  *   `additionalExperiments` (*type:* `list(String.t)`, *default:* `nil`) - Additional experiment flags for the job.
  *   `additionalUserLabels` (*type:* `map()`, *default:* `nil`) - Additional user labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) page. An object containing a list of key/value pairs. Example: { "name": "wrench", "mass": "1kg", "count": "3" }.
  *   `bypassTempDirValidation` (*type:* `boolean()`, *default:* `nil`) - Whether to bypass the safety checks for the job's temporary directory. Use with caution.
  *   `enableStreamingEngine` (*type:* `boolean()`, *default:* `nil`) - Whether to enable Streaming Engine for the job.
  *   `ipConfiguration` (*type:* `String.t`, *default:* `nil`) - Configuration for VM IPs.
  *   `kmsKeyName` (*type:* `String.t`, *default:* `nil`) - Name for the Cloud KMS key for the job. The key format is: projects//locations//keyRings//cryptoKeys/
  *   `machineType` (*type:* `String.t`, *default:* `nil`) - The machine type to use for the job. Defaults to the value from the template if not specified.
  *   `maxWorkers` (*type:* `integer()`, *default:* `nil`) - The maximum number of Compute Engine instances to be made available to your pipeline during execution, from 1 to 1000.
  *   `network` (*type:* `String.t`, *default:* `nil`) - Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
  *   `numWorkers` (*type:* `integer()`, *default:* `nil`) - The initial number of Compute Engine instances for the job.
  *   `serviceAccountEmail` (*type:* `String.t`, *default:* `nil`) - The email address of the service account to run the job as.
  *   `subnetwork` (*type:* `String.t`, *default:* `nil`) - Subnetwork to which VMs will be assigned, if desired. You can specify a subnetwork using either a complete URL or an abbreviated path. Expected to be of the form "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" or "regions/REGION/subnetworks/SUBNETWORK". If the subnetwork is located in a Shared VPC network, you must use the complete URL.
  *   `tempLocation` (*type:* `String.t`, *default:* `nil`) - The Cloud Storage path to use for temporary files. Must be a valid Cloud Storage URL, beginning with `gs://`.
  *   `workerRegion` (*type:* `String.t`, *default:* `nil`) - The Compute Engine region (https://cloud.google.com/compute/docs/regions-zones/regions-zones) in which worker processing should occur, e.g. "us-west1". Mutually exclusive with worker_zone. If neither worker_region nor worker_zone is specified, default to the control plane's region.
  *   `workerZone` (*type:* `String.t`, *default:* `nil`) - The Compute Engine zone (https://cloud.google.com/compute/docs/regions-zones/regions-zones) in which worker processing should occur, e.g. "us-west1-a". Mutually exclusive with worker_region. If neither worker_region nor worker_zone is specified, a zone in the control plane's region is chosen based on available capacity. If both `worker_zone` and `zone` are set, `worker_zone` takes precedence.
  *   `zone` (*type:* `String.t`, *default:* `nil`) - The Compute Engine [availability zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones) for launching worker instances to run your pipeline. In the future, worker_zone will take precedence.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :additionalExperiments => list(String.t()) | nil,
          :additionalUserLabels => map() | nil,
          :bypassTempDirValidation => boolean() | nil,
          :enableStreamingEngine => boolean() | nil,
          :ipConfiguration => String.t() | nil,
          :kmsKeyName => String.t() | nil,
          :machineType => String.t() | nil,
          :maxWorkers => integer() | nil,
          :network => String.t() | nil,
          :numWorkers => integer() | nil,
          :serviceAccountEmail => String.t() | nil,
          :subnetwork => String.t() | nil,
          :tempLocation => String.t() | nil,
          :workerRegion => String.t() | nil,
          :workerZone => String.t() | nil,
          :zone => String.t() | nil
        }

  field(:additionalExperiments, type: :list)
  field(:additionalUserLabels, type: :map)
  field(:bypassTempDirValidation)
  field(:enableStreamingEngine)
  field(:ipConfiguration)
  field(:kmsKeyName)
  field(:machineType)
  field(:maxWorkers)
  field(:network)
  field(:numWorkers)
  field(:serviceAccountEmail)
  field(:subnetwork)
  field(:tempLocation)
  field(:workerRegion)
  field(:workerZone)
  field(:zone)
end

defimpl Poison.Decoder,
  for: GoogleApi.DataPipelines.V1.Model.GoogleCloudDatapipelinesV1RuntimeEnvironment do
  def decode(value, options) do
    GoogleApi.DataPipelines.V1.Model.GoogleCloudDatapipelinesV1RuntimeEnvironment.decode(
      value,
      options
    )
  end
end

defimpl Poison.Encoder,
  for: GoogleApi.DataPipelines.V1.Model.GoogleCloudDatapipelinesV1RuntimeEnvironment do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
